/*
 * DetailBand.java
 *
 * Created on 12 de Mar�o de 2003, 22:40
 */

package saci.reptil;

import java.awt.Component;
import java.awt.Image;
import javax.swing.ImageIcon;

/**
 * Classe que representa a banda detalhe (banco de dados)
 *
 * @author  saci
 */
public class DetailBand extends Band {
    final static long serialVersionUID = 14236775475312073L;
    
    /**
     * Cria uma nova inst�ncia da classe
     */
    public DetailBand() {
        super();
    }
    
    /**
     * Cria uma nova inst�ncia da classe
     */
    public DetailBand(java.awt.LayoutManager layout) {
        this();
        setLayout(layout);
    }
    
    /**
     * Prepara a banda para ser impressa ou visualizada
     */
    public void prepare(Object[] parameters) {
        if (parameters.length == 3) {
            int row = ((Integer)parameters[0]).intValue();
            ReportData rd = (ReportData)parameters[1];
            fill(rd, row, getComponents());
        }
        else
            throw new RuntimeException("Invalid parameters");
    }
    
    /**
     * Preenche os campos DbLabel
     *
     * @param reportData a fonte de dados do relat�rio
     * @param row a linha de dados
     * @param c os componentes a serem preenchidos
     */
    public void fill(ReportData reportData, int row, Component[] c) {
        DbLabel lbl;
        Object obj;
        
        for (int i = 0; i < c.length; i++) {
            if (c[i] instanceof DbLabel) {
                lbl = (DbLabel)c[i];
                obj = reportData.get(row, lbl.getField());
                
                if (obj != null) {
                    if (obj instanceof Image)
                        lbl.setIcon(new ImageIcon((Image)obj));
                    else
                        lbl.setText(obj.toString());
                }
            }
            else if (c[i] instanceof InnerPanel) {
                fill(reportData, row, ((InnerPanel)c[i]).getComponents());
            }
        }
    }
    
}